/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.disco.gco.view;

import com.jjsoft.disco.gco.mdl.Producto;
import com.jjsoft.disco.gco.mdl.Productobarra;
import com.jjsoft.disco.gco.ngc.ProductoBarraManager;
import com.jjsoft.disco.gco.ngc.ProductoManager;
import com.jjsoft.disco.gco.util.CNumeros;
import com.jjsoft.disco.gco.util.CSelecciones;
import com.jjsoft.disco.gco.util.MiModelo;
import com.jjsoft.disco.gco.util.configuraciones;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

/**
 *
 * @author johnny
 */
public class VSeleccionArticulo extends javax.swing.JFrame {

    /**
     * Creates new form VSeleccionArticulo
     */
    ProductoManager productoManager = new ProductoManager();
    ProductoBarraManager pbm = new ProductoBarraManager();
    List<Producto> listaProductos;
    Producto prod = new Producto();
    int tipoI = 0;
    boolean factura;
    boolean compra = false;

    public VSeleccionArticulo(boolean factura) {
        initComponents();
        this.factura = factura;
        if (!factura) {
            listaProductos = productoManager.listarProductos(0);
        } else {
            listaProductos = new ArrayList<Producto>();
            List<Productobarra> listaProductosBarra = pbm.cargarProductos(configuraciones.barra);
            if (listaProductosBarra != null) {
                for (int i = 0; i < listaProductosBarra.size(); i++) {
                    listaProductos.add(listaProductosBarra.get(i).getIdProducto());
                    listaProductos.get(i).setStock(listaProductosBarra.get(i).getCantidad());
                }
                List<Producto> listaCocteles = productoManager.listarProductos();
                for (int i = 0; i < listaCocteles.size(); i++) {
                    if (listaCocteles.get(i).getTipo() == 1) {
                        listaProductos.add(listaCocteles.get(i));
                    }
                }

                for (int i = 0; i < listaProductos.size(); i++) {
                    if (listaProductos.get(i).getTipo() == 1) {
                        int menor = 0;
                        for (int j = 0; j < listaProductos.get(i).getIngredienteList1().size(); j++) {
                            double cantidad = listaProductos.get(i).getIngredienteList1().get(j).getCantidad() * listaProductos.get(i).getIngredienteList1().get(j).getIdUnidadMedida().getOnzas();
                            double stockBarra = 0;
                            for (int k = 0; k < listaProductos.size(); k++) {
                                if (listaProductos.get(k).getIdProductos() == listaProductos.get(i).getIngredienteList1().get(j).getIdIngredienteProducto().getIdProductos()) {
                                    stockBarra = listaProductos.get(k).getStock();
                                    listaProductos.get(i).getIngredienteList1().get(j).getIdIngredienteProducto().setStock(stockBarra);
                                    break;
                                }
                            }
                            int stock = (int) (listaProductos.get(i).getIngredienteList1().get(j).getIdIngredienteProducto().getStock() * listaProductos.get(i).getIngredienteList1().get(j).getIdIngredienteProducto().getCapacidad() / cantidad);
                            if (j == 0 || stock < menor) {
                                menor = stock;
                            }

                        }
                        listaProductos.get(i).setStock((double) menor);
                    }
                }
            }
        }
        cargarDatos();
    }

    public VSeleccionArticulo() {
        initComponents();
        listaProductos = productoManager.listarProductos(0);
        compra = true;
        cargarDatos();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPopupMenu1 = new javax.swing.JPopupMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        cmdTodo = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        dtgProductos = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        txtMatch = new javax.swing.JTextField();
        cmdBuscar = new javax.swing.JButton();
        cmdSeleccionar = new javax.swing.JButton();

        jMenuItem1.setText("jMenuItem1");
        jPopupMenu1.add(jMenuItem1);

        jMenuItem2.setText("jMenuItem2");
        jPopupMenu1.add(jMenuItem2);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        cmdTodo.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        cmdTodo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/listar.png"))); // NOI18N
        cmdTodo.setText("    Mostrar Todos");
        cmdTodo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdTodoActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Ubuntu", 1, 18)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 0, 153));
        jLabel2.setText("Seleccione un articulo");

        dtgProductos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        dtgProductos.setComponentPopupMenu(jPopupMenu1);
        dtgProductos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(dtgProductos);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(51, 51, 51));
        jLabel1.setText("Buscar en la tabla:");

        txtMatch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtMatchActionPerformed(evt);
            }
        });
        txtMatch.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                txtMatchPropertyChange(evt);
            }
        });
        txtMatch.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtMatchKeyPressed(evt);
            }
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtMatchKeyReleased(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtMatchKeyTyped(evt);
            }
        });

        cmdBuscar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        cmdBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/buscar.png"))); // NOI18N
        cmdBuscar.setText("  Buscar");
        cmdBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdBuscarActionPerformed(evt);
            }
        });

        cmdSeleccionar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        cmdSeleccionar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/check.png"))); // NOI18N
        cmdSeleccionar.setText("  Seleccionar");
        cmdSeleccionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSeleccionarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtMatch, javax.swing.GroupLayout.PREFERRED_SIZE, 249, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(cmdBuscar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmdSeleccionar)
                        .addGap(174, 174, 174))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 724, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(12, 12, 12)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel2)
                                    .addComponent(cmdTodo))))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addGap(18, 18, 18)
                .addComponent(cmdTodo, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(9, 9, 9)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 246, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtMatch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmdBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmdSeleccionar, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
                .addGap(20, 20, 20))
        );

        setSize(new java.awt.Dimension(764, 426));
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void cmdTodoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdTodoActionPerformed
        // TODO add your handling code here:
        listaProductos = productoManager.listarProductos(0);
        cargarDatos();

    }//GEN-LAST:event_cmdTodoActionPerformed

    private void txtMatchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtMatchActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtMatchActionPerformed

    private void txtMatchPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_txtMatchPropertyChange
        // TODO add your handling code here:
    }//GEN-LAST:event_txtMatchPropertyChange

    private void txtMatchKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtMatchKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == 10) {
            cmdBuscar.doClick();
        }
    }//GEN-LAST:event_txtMatchKeyPressed

    private void txtMatchKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtMatchKeyReleased
        // TODO add your handling code here:
    }//GEN-LAST:event_txtMatchKeyReleased

    private void txtMatchKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtMatchKeyTyped
        // TODO add your handling code here:
    }//GEN-LAST:event_txtMatchKeyTyped

    private void cmdBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdBuscarActionPerformed
        // TODO add your handling code here:
        if (factura) {
            listaProductos = productoManager.listarProductos(txtMatch.getText(), -1);
        } else {
            listaProductos = productoManager.listarProductos(txtMatch.getText(), 0);
        }
        cargarDatos();
    }//GEN-LAST:event_cmdBuscarActionPerformed

    private void cmdSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSeleccionarActionPerformed
        // TODO add your handling code here:
        if (dtgProductos.getSelectedRow() == -1) {
            JOptionPane.showMessageDialog(null, "Primero seleccione un Producto", "Error", JOptionPane.ERROR_MESSAGE);
        } else {

            CSelecciones.producto = listaProductos.get(dtgProductos.getSelectedRow());
            if (!factura) {
                if (compra) {
                    CSelecciones.texto1.setText(CSelecciones.producto.getCodigo());
                    CSelecciones.texto2.setText(CSelecciones.producto.getPrecioVenta().toString());
                    CSelecciones.texto3.setText(CSelecciones.producto.getPrecioCosto().toString());
                }else{
                    CSelecciones.texto1.setText(CSelecciones.producto.getIdCategoria().getNombre() + " " + CSelecciones.producto.getDescripcion());
                }
                
            } else {
                CSelecciones.texto1.setText(CSelecciones.producto.getCodigo());
                CSelecciones.texto2.setText(CSelecciones.producto.getPrecioVenta().toString());

            }
            this.dispose();
        }
    }//GEN-LAST:event_cmdSeleccionarActionPerformed

    /**
     * @param args the command line arguments
     */
    private void cargarDatos() {
        MiModelo modelo = new MiModelo();
        String[] identificadores = new String[]{"Cod", "Descripcion", "Categoria", "P. Venta", "Stock", "Onzas"};
        modelo.setColumnIdentifiers(identificadores);
        for (int i = 0; i < listaProductos.size(); i++) {
            double onzas = 0;
            if (listaProductos.get(i).getTipo() == 0) {
                double entero = listaProductos.get(i).getStock().intValue();
                double decimal = listaProductos.get(i).getStock() - entero;
                onzas = Math.round(listaProductos.get(i).getCapacidad() * decimal);
                if (onzas == listaProductos.get(i).getCapacidad()) {
                    onzas = 0;
                }
            }
            String categoria;
            if (listaProductos.get(i).getIdCategoria() == null) {
                categoria = "Coctel";
            } else {
                categoria = listaProductos.get(i).getIdCategoria().getNombre();
            }
            int stock = (int) CNumeros.redondear(listaProductos.get(i).getStock());

            String[] producto = new String[]{listaProductos.get(i).getCodigo(), listaProductos.get(i).getDescripcion(), categoria, CNumeros.Formato(listaProductos.get(i).getPrecioVenta()), CNumeros.Formato(stock), CNumeros.Formato(onzas)};
            modelo.addRow(producto);

        }
        dtgProductos.setModel(modelo);
        dtgProductos.getColumn("Cod").setPreferredWidth(45);
        dtgProductos.getColumn("Descripcion").setPreferredWidth(250);
        dtgProductos.getColumn("Categoria").setPreferredWidth(50);
    }

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(VSeleccionArticulo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(VSeleccionArticulo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(VSeleccionArticulo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(VSeleccionArticulo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.out.println("Error setting native LAF: " + e);
        }
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new VSeleccionArticulo(false).setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton cmdBuscar;
    private javax.swing.JButton cmdSeleccionar;
    private javax.swing.JButton cmdTodo;
    private javax.swing.JTable dtgProductos;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField txtMatch;
    // End of variables declaration//GEN-END:variables
}
